package com.ruoyi.system.mapper;

import java.util.List;
import java.util.Map;
import com.ruoyi.system.domain.Alarm;
import org.apache.ibatis.annotations.Param;

/**
 * 告警信息Mapper接口
 * 
 * @author ruoyi
 * @date 2025-06-28
 */
public interface AlarmMapper 
{
    /**
     * 查询告警信息
     * 
     * @param aId 告警信息主键
     * @return 告警信息
     */
    public Alarm selectAlarmByAId(Integer aId);

    /**
     * 查询告警信息列表
     * 
     * @param alarm 告警信息
     * @return 告警信息集合
     */
    public List<Alarm> selectAlarmList(Alarm alarm);

    /**
     * 新增告警信息
     * 
     * @param alarm 告警信息
     * @return 结果
     */
    public int insertAlarm(Alarm alarm);

    /**
     * 修改告警信息
     * 
     * @param alarm 告警信息
     * @return 结果
     */
    public int updateAlarm(Alarm alarm);

    /**
     * 删除告警信息
     * 
     * @param aId 告警信息主键
     * @return 结果
     */
    public int deleteAlarmByAId(Integer aId);

    /**
     * 批量删除告警信息
     * 
     * @param aIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteAlarmByAIds(Integer[] aIds);

    /**
     * 查询所有充电站
     * 
     * @return 充电站列表
     */
    List<Map<String, Object>> selectAllStations();

    /**
     * 查询指定充电站的告警分析数据
     * 
     * @param stationId 充电站ID
     * @return 告警分析数据
     */
    Map<String, Object> selectAlarmAnalysisByStationId(Integer stationId);
    /**
     * 查询指定充电站的告警类型分布
     * @param stationId 充电站ID
     * @return 类型分布
     */
    List<Map<String, Object>> selectTypeDistributionByStationId(Integer stationId);

    /**
     * 查询指定充电站的告警等级分布
     * @param stationId 充电站ID
     * @return 等级分布
     */
    List<Map<String, Object>> selectLevelDistributionByStationId(Integer stationId);

    /**
     * 查询指定充电站、月份的每日告警次数
     * @param stationId 充电站ID
     * @param month 月份
     * @return 每日告警次数
     */
    List<Map<String, Object>> selectDailyAlarmCount(@Param("stationId") Integer stationId, @Param("month") String month);

    /**
     * 查询指定充电站、月份的每日告警时长占比
     * @param stationId 充电站ID
     * @param month 月份
     * @return 每日告警时长占比
     */
    List<Map<String, Object>> selectDailyAlarmDurationPercent(@Param("stationId") Integer stationId, @Param("month") String month);
}
